//
// Created by xsh on 2025/6/4.
//
#pragma once
// 以后重构
#include <string>
/*
enum class ParamType {
    Int,
    Double,
    Bool,
    String
};
struct Parameter {
    std::string name;
    ParamType type;
    union {
        int intValue;
        double doubleValue;
        bool boolValue;
        const char* stringValue;
    };
    // 构造函数（C++11 起支持）
    Parameter(const char* name, int value)
            : name(name), type(ParamType::Int), intValue(value) {}

    Parameter(const char* name, double value)
            : name(name), type(ParamType::Double), doubleValue(value) {}

    Parameter(const char* name, bool value)
            : name(name), type(ParamType::Bool), boolValue(value) {}

    Parameter(const char* name, const char* value)
            : name(name), type(ParamType::String), stringValue(value) {}*/
class Instrument{
public:
    virtual ~Instrument() = default;

    // 音频生成接口
    virtual double genWave(short* buffer, int numSamples,
                           double phase, double sampleRate) = 0;

    // 事件处理接口 旧代码
    //virtual void onEvent(const char* eventName, jobject value, JNIEnv* env) = 0;
    virtual void onEvent(const char* eventName,int value) = 0;
    virtual void onEvent(const char* eventName,double value)= 0;
    virtual void onEvent(const char* eventName,bool value) = 0;
};
// 插件入口函数类型
typedef Instrument* (*CreateInstrumentFunc)();
typedef void (*DestroyInstrumentFunc)(Instrument*);